草庐IT

C++11 auto 和 size_type

全部标签

c++ - int8_t 和 char : converts between pointers to integer types with different sign - but it doesn't

我正在处理一些嵌入式代码,并且正在从头开始编写一些新东西,因此我更愿意坚持使用uint8_t、int8_t等类型。然而,当移植一个函数时:voidfunctionName(char*data)到:voidfunctionName(int8_t*data)在将文字字符串传递给函数时,我收到编译器警告“在指向具有不同符号的整数类型的指针之间转换”。(即调用functionName("putthistextin");时)。现在,我明白了为什么会发生这种情况,并且这些行只是调试,但我想知道人们认为什么是最合适的处理方式,而不是对每个文字字符串进行类型转换。在实践中,我不认为一揽子类型转换比使用

c++11 decltype 返回引用类型

我有点困惑为什么在某些情况下使用逗号运算符的decltype会返回引用类型。例如,在这段代码中:inti=101;decltype(1,i)var=i;var=20;printf("%d\n",i);//willprint20在这里,var是int&而不是int,但是如果我将第二行替换为:decltype(i)var=i;它将返回int!谁能解释一下? 最佳答案 decltype是特殊情况,用于未加括号的id-expression以给出实体的类型,没有引用限定[dcl.type.simple]:4-Thetypedenotedbyd

c++ - 在 C++11 中,引用在运行时明显发生变化

考虑以下C++11中的简单代码,摘自C++Primer,5thEdition:#include#includeusingstd::cout;usingstd::string;usingstd::endl;intmain(){strings("HelloWorld!!!");for(auto&c:s)//foreverycharins(note:cisareference)c=toupper(c);//cisareference,sotheassignmentchangesthecharcout该代码使用rangefor循环遍历string中的每个字符并将其更改为大写,这非常简单。令我困

c++ - 正在为 C++11 之前的编译器返回线程安全的本地静态对象

对于C++11之前的编译器来说,这个单例线程安全吗?正如我们所知,对于C++11,它是线程安全的。classSingleton{private:Singleton(){};public:staticSingleton&instance(){staticSingletonINSTANCE;returnINSTANCE;}}; 最佳答案 在C++11中,使该线程安全的是来自draftC++11standard的以下内容6.7部分声明语句说(强调我的):Thezero-initialization(8.5)ofallblock-scope

c++ 11通过constexpr在编译时获取字符串长度

#includeconstexprsize_tconstLength(constchar*str){return(*str==0)?0:constLength(str+1)+1;}int_tmain(intargc,_TCHAR*argv[]){constchar*p="1234567";size_ti=constLength(p);printf(p);printf("%d",i);return0;}大家好我想在编译时获取字符串的长度。所以我写了上面的代码。但是在反汇编代码中,我发现下面名为sub_401000的“constLength”函数将导致计算字符串长度的运行时开销。是否有有问

c++ - 成员函数中的 decltype(auto) 忽略无效主体,decltype(expr) 失败

我有一个简单的模板化包装器结构,其成员函数在其模板类型的对象上调用.error()。templatestructWrapper{Tt;decltype(auto)f(){returnt.error();//calls.error()}};如果我用一个没有error()成员函数的类型实例化它,只要我不调用它就没问题。这就是我想要的行为。Wrapperw;//noproblemhere//w.error();//uncommentedcausescompilationfailure如果我使用我认为是具有尾随返回类型的语义等价物,它会在变量声明上出错templatestructWrapper

c++ - 在没有 C++ 11 的情况下使用 char16_t、char32_t 等?

我想要固定宽度的类型,包括字符类型。提供整数类型,但不提供字符类型,除非在使用C++11时,这是我做不到的。是否有一种干净的方法来定义这些类型(char16_t、char32_t等)而不与C++11定义的类型发生冲突,以防源代码与C++11混合?谢谢你:) 最佳答案 我认为,检查是否支持这种类型是平台相关的事情。例如,GCC定义:__CHAR16_TYPE__和__CHAR32_TYPE__如果提供了这些类型(需要ISOC11或C++11支持)。但是,您不能直接检查它们的存在,因为它们是基本类型,而不是宏:InC++,char16_

c++ - "no matching function for call to ‘async(std::launch, <unresolved overloaded function type>, std::string&)’“

我正在尝试使用std::async创建线程,但我不断收到错误“没有匹配函数调用‘async(std::launch,,std::string&)’”在行上ConnectFuture=std::async(std::launch::async,Connect_T,ip);这是产生这种行为的代码:#includeclasslibWrapper{public:voidConnect(std::stringip);voidConnect_T(std::stringip);private:std::futureConnectFuture;};voidlibWrapper::Connect(std

c++ - 在编译时或运行时将 const char * 映射到 duck-typed T

我有很多类A、B、C、D等,它们都是鸭子类型的,因此具有相同的方法和接口(interface),但不是从同一个类继承的。例如classA{public:voidfoo();voidbar();}classB{public:voidfoo();voidbar();}classC{public:voidfoo();voidbar();}我想在运行时将constchar*映射到这些类之一的相应实例,例如“A”->Aa“B”->Bb这里a是类A的一些实例。或在编译时将'constchar*`映射到相应的类型,例如“A”->A我需要在其他一些函数调用中使用该对象的实例(即调用foo()或bar(

c++ - 有效的 C++03 模板代码无法在 C++11 中编译

我在编写有效的C++03模板代码时遇到了一个小问题(虽然很容易解决),该代码可以正常编译,但在使用C++11方言时无法编译。问题出现在模板参数解析处。以这段代码为例:templatestructnumber_of_bits{enum{value=1+number_of_bits>1>::value};};templatestructnumber_of_bits{enum{value=0};};由于C++11现在允许“>>”完成将模板化参数作为最后一个参数的模板参数列表,因此在解析此代码时会产生问题。我使用GCC(版本4.8.1)作为我的编译器,它使用命令行正常编译:g++test.cc